
using namespace std;

struct B {
    virtual void f1(int) const {}
    virtual void f2() {}
    void f3() {}
};

struct D1 : B {
    void f1(int) const override {}          // 正确：f1 与基类中的 f1 匹配
    // void f2(int) override {}             // 错误：B 没有形如 f2(int) 的函数
    // void f3() override {}                // 错误：f3 不是虚函数
    // void f4() override {}                // 错误：B 没有名为 f4 的函数
};

struct D2 : B {
    // 从 B 继承 f2() 和 f3()，覆盖 f1(int)
    void f1(int) const final {}         // 不允许后续的其他类覆盖 f1(int)
};

struct  D3 : D2 {
    void f2() {}                        // 正确：覆盖从间接基类 B 继承而来的 f2
    // void f1(int) const {}               // 错误：D2 已经将 f2 声明成 final
};
